(function($) {
	$(document).bind("initTrule", function() {
		// Atalho para os validadores
		var _valid = $.fn.trule.validators;
		
		// Define configurações globais
		$().trule({
			messages: window.messages,
			firstErro: function(r) {
				r.oRef.focus();
			},
			error: function(r, msg) {
				var $field = $(r.oRef)
						.addClass("classeDeErroNoCampo")
	                    .removeClass("classeDeSucessoNoCampo"),
                    truleField = $field.attr("truleField"),
                    $truleField;
					
					if (truleField) {
						$truleField = $(truleField)
							.show()
							.addClass("classeDeErroNaMensagem")
							.removeClass("classeDeSucessoNaMensagem")
							.text(msg);
					}
			},
			success: function(r, msg) {
				var $field = $(r.oRef)
						.addClass("classeDeSucessoNoCampo")
	                    .removeClass("classeDeErroNoCampo"),
					truleField = $field.attr("truleField"),
                    $truleField;
					
					if (truleField) {
						$truleField = $(truleField)
							.show()
							.addClass("classeDeSucessoNaMensagem")
							.removeClass("classeDeErroNaMensagem")
							.text("");
					}
			}
		});
		
		// Adiciona handles de evento ao submit dos formulários
		$("form").bind("submit", function(event) {
			if (!$(this).trule().validateAll()) {
				event.preventDefault();
			}
		});
	});
})(jQuery);